查看原文
其他

Linux下time命令进行性能分析

运维研习社 运维研习社 2022-11-05


在linux中,我们通常用time命令来计算某个程序或某个命令、脚本的运行耗时,比如我需要查看ps命令执行时间



通常会在命令执行结束后,输出统计结果,统计结果中有三个统计时间,分别是real、user、sys,详细解释如下:


  • real:从进程 ps 开始执行到完成所耗费的 CPU 总时间。该时间包括 ps 进程执行时实际使用的 CPU 时间,ps 进程耗费在阻塞上的时间(如等待完成 I/O 操作)和其他进程所耗费的时间(Linux 是多进程系统,ps 在执行过程中,可能会有别的进程抢占 CPU)。

  • user:进程 ps 执行用户态代码所耗费的 CPU 时间。该时间仅指 ps 进程执行时实际使用的 CPU 时间,而不包括其他进程所使用的时间和本进程阻塞的时间。

  • sys:进程 ps 在内核态运行所耗费的 CPU 时间,即执行内核系统调用所耗费的 CPU 时间。


今天要说的这个time命令有点不一样,它不是一个内置的命令工具,我们上面用的time是一个bash的内置shell关键字

而我们今天要说的这个time命令是一个强大的性能分析工具,安装方法很简单,直接通过yum安装即可


安装完成后即可使用


和time一样,也是在最后显示统计信息,比time统计的信息要全面,但是输出的格式不太友好,在time命令后添加-v选项

显示更详细的内容,包括执行时间、CPU占用、内存占用、IO等,详细的输出指标介绍如下:


  • Elapsed (wall clock) time    执行命令所花费的时间,格式是:[hour]:minute:second    

  • System time    命令执行时在内核模式所花费的时间,单位是秒    

  • User time    命令执行时在使用者模式所花费的时间,单位是秒    

  • Percent of CPU this job got    命令执行时 CPU 的占用比例。
    其实这个数字就是内核模式的 CPU 时间加上使用者模式的 CPU 时间除以总时间    

  • Maximum resident set size    执行程序所占用内存的最大值。单位是 KB    

  • Average resident set size    执行程序所占用内存的平均值,单位是 KB    

  • Average total size    执行程序所占用的内存总量(stack+data+text)的平均大小, 单位是 KB    

  • Average unshared data size    执行程序所占用的私有数据区(unshared data area)的平均 大小,单位是 KB    

  • Average stack size    执行程序所占用的私有堆栈(unshared stack)的平均大小, 单位是 KB    

  • Average shared text size    执行程序间共享内容(shared text)的平均值,单位是 KB    

  • Page size    系统内存页的大小,单位是 byte。对于同一个系统来说,这 是个常数    

  • Major (requiring I/O) page faults    此程序的主要内存页错误发生的次数。
    所谓的主要内存页错误是指某一内存页己经詈换到 SWAP 分区中,又被其他程序使用过,该页的内容必须从 SWAP 分区里再读出来才能使用    

  • Minor (reclaiming a frame) page faults    此程序的次要内存页错误发生的次数。
    所谓的次要内存页错误是指某一内存页虽然己经詈换到 SWAP 中,但尚未被其他程序使用。此时该页的内容并未 被破坏,不必从 SWAP 分区里读出来即可直接使用    

  • Swaps    此程序被交换到 SWAP 分区的次数    

  • Involuntary context switches    此程序被强迫中断(如 CPU 时间耗尽)的次数    

  • Voluntary context switches    此程序自愿中断(I/O 执行完毕,磁碟读取完成等)的次数    

  • File system inputs    此程序所输入的文件数    

  • File system outputs    此程序所输出的文件数    

  • Socket messages received    此程序所收到的 Socket Message    

  • Socket messages sent    此程序所送出的 Socket Message    

  • Signals delivered    此程序所收到的信号数    

  • Exit status    命令退出状态    


通过time命令的输出,可以很直观的查看到应用、脚本或命令的性能问题是出现在什么地方


使用该time命令,可以通过命令前加'\',或者指定目录/usr/bin/time来执行,否则使用的是bash中的time



几种方法有效屏蔽国外IP恶意扫描 懒人玩docker必备 gpreftools动态追踪Nginx进行性能分析gpreftools动态追踪Nginx进行性能分析 



更多精彩内容请扫描下方二维码关注公众号


扫描二维码关注我们吧



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存